package com.qf.controller;

import com.qf.pojo.User;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * @Controller:控制器
 * @RequestMapping("/test")(类， 方法注解)： 请求映射路径
 *      可用在方法和类上，  请求时路径应该是： 类上路径  +  方法上的路径
 *      可接收get 和 post请求
 *
 * @RequestMapping(value = "/param01", method = RequestMethod.POST)  只能接收post请求，相当于注解 @PostMapping
 * @RequestMapping(value = "/param01", method = RequestMethod.GET)只能接收get请求，相当于注解 @GetMapping
 *
 *  @RequestParam: 绑定参数(在接收分页参数时经常使用)
 *      name: 指定前端的名称
 *      required: 默认值为true， true必须传此参数, false 可以不传此参数
 *      defaultValue: 默认值
 *  springMVC中默认的是请求转发
 *  重定向：redirect
 *  请求转发： forward
 * 注意： 如果 写了redirect, forward关键字，则视图解析器不会添加前缀和后缀
 *
 * 响应数据
 *   请求域存储数据
 *      ModelMap, Model,  可以手动new ，也可以写到处理器的参数, 可以在请求域存储数据
 *      ModelAndView:模型和视图对象，可以手动new ，也可以写到处理器的参数, 可以在请求域存储数据，也能指定视图页面
 *
 * @author 千锋教育
 * @Company http://www.mobiletrain.org/
 * @Version 1.0
 */
@Controller
@SessionAttributes(names = {"username", "sex"} )
//@RequestMapping("/test")
public class TestController {

//    @RequestMapping(value = "/param01", method = RequestMethod.POST)
    @PostMapping("/param01")
    public String param01(
            @RequestParam(name = "uid",required = false, defaultValue = "1") Integer id,
            String name, boolean flag, char sex){
        System.out.println("id:" + id);
        System.out.println("name:" + name);
        System.out.println("flag:" + flag);
        System.out.println("sex:" + sex);
        return "success";
    }

    @RequestMapping("/param02")
    public String param02(User user, ModelMap map, Model model){
//        model.addAttribute("", "");
//        map.put("username","江兵");
//        System.out.println("id:" + user.getId());
//        System.out.println("name:" + user.getName());
//        System.out.println("flag:" + user.isFlag());
//        System.out.println("sex:" + user.getSex());
        return "redirect:/success.jsp";
    }

    @RequestMapping("/param03")
    public String param03(@DateTimeFormat(pattern = "yyyy-MM-dd") Date birthday){
        System.out.println("生日:" + birthday);
        return "success";
    }


    @RequestMapping("/param04")
    public String param04(String[] args){
        System.out.println("字符串数组:" + Arrays.toString(args));
        return "success";
    }

    @RequestMapping("/param05")
    public String param05(@RequestParam("args") List<String> args){
        System.out.println("List集合:" + args);
        return "success";
    }


    @RequestMapping("/param06")
    public ModelAndView param06(ModelAndView mav){
        //添加数据到请求域
        mav.addObject("username", "陈志浩");
        mav.addObject("sex", "男");
        //指定视图页面
        mav.setViewName("redirect:/success.jsp");
        return mav;
    }
}
